﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace TangoFamilyAndGuide.DB
{
    public class AirTicket : db
    {
        public enum eHorarios
		{
			None,
			DB,
			Lista
		};

        public AirTicket(Entidades.Sesion Sesion) : base(Sesion)
        {
        }
        public void Leer(Entidades.AirTicket AirTicket)
        {
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select AirTicket.IdAirTicket, AirTicket.IdUsuario, AirTicket.Nombre,  AirTicket.Telefono, AirTicket.Email, AirTicket.IdaYVuelta, AirTicket.PaisOrigen, AirTicket.ProvinciaOrigen, AirTicket.LocalidadOrigen, AirTicket.PaisDestino, AirTicket.ProvinciaDestino, AirTicket.LocalidadDestino, ");
            a.Append("AirTicket.FechaDesde, AirTicket.FechaHasta, AirTicket.Clase, AirTicket.CantidadPersonasAdult, AirTicket.CantidadPersonasChild, AirTicket.Descripcion, AirTicket.FechaAlta, AirTicket.IdWF, AirTicket.Estado ");
            a.Append("from AirTicket ");
            a.Append("where AirTicket.IdAirTicket = " + AirTicket.Id + " ");
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count == 0)
            {
                throw new TangoFamilyAndGuide.EX.Validaciones.ElementoInexistente("AirTicket " + AirTicket.Id);
            }
            else
            {
                Copiar(dt.Rows[0], AirTicket);
            }
        }
        private void Copiar(DataRow Desde, Entidades.AirTicket Hasta)
        {
            Hasta.Id = Convert.ToInt32(Desde["IdAirTicket"]);
            Hasta.Usuario.Id = Convert.ToString(Desde["IdUsuario"]);
            Hasta.Nombre = Convert.ToString(Desde["Nombre"]);
            Hasta.Telefono = Convert.ToString(Desde["Telefono"]);
            Hasta.Email = Convert.ToString(Desde["Email"]);
            Hasta.IdaYVuelta = Convert.ToBoolean(Desde["IdaYVuelta"]);
            Hasta.PaisOrigen = Convert.ToString(Desde["PaisOrigen"]);
            Hasta.ProvinciaOrigen = Convert.ToString(Desde["ProvinciaOrigen"]);
            Hasta.LocalidadOrigen = Convert.ToString(Desde["LocalidadOrigen"]);
            Hasta.PaisDestino = Convert.ToString(Desde["PaisDestino"]);
            Hasta.ProvinciaDestino = Convert.ToString(Desde["ProvinciaDestino"]);
            Hasta.LocalidadDestino = Convert.ToString(Desde["LocalidadDestino"]);
            Hasta.FechaDesde = Convert.ToDateTime(Desde["FechaDesde"]);
            Hasta.FechaHasta = Convert.ToDateTime(Desde["FechaHasta"]);
            Hasta.Clase = Convert.ToString(Desde["Clase"]);
            Hasta.CantidadPersonasAdult = Convert.ToInt32(Desde["CantidadPersonasAdult"]);
            Hasta.CantidadPersonasChild = Convert.ToInt32(Desde["CantidadPersonasChild"]);
            Hasta.Descripcion = Convert.ToString(Desde["Descripcion"]);
            Hasta.FechaAlta = Convert.ToDateTime(Desde["FechaAlta"]); 
            Hasta.WF.Id = Convert.ToInt32(Desde["IdWF"]);
            Hasta.WF.Estado = Convert.ToString(Desde["Estado"]);
        }
        public int Crear(Entidades.AirTicket AirTicket)
        {
            StringBuilder a = new StringBuilder(string.Empty);
            a.AppendLine("declare @idWF varchar(256) ");
            a.AppendLine("declare @idUltimoIdAirTicket varchar(256) ");
            a.AppendLine("update Configuracion set @idWF=Valor=convert(varchar(256), convert(int, Valor)+1) where IdItemConfig='UltimoIdWF' ");
            a.AppendLine("update Configuracion set @idUltimoIdAirTicket=Valor=convert(varchar(256), convert(int, Valor)+1) where IdItemConfig='UltimoIdAirTicket' ");
            a.Append("Insert AirTicket (IdAirTicket, IdUsuario, Nombre, Telefono, Email, IdaYVuelta, PaisOrigen, ProvinciaOrigen, LocalidadOrigen, PaisDestino, ProvinciaDestino, LocalidadDestino, ");
            a.Append("FechaDesde, FechaHasta, Clase, CantidadPersonasAdult, CantidadPersonasChild, Descripcion, FechaAlta, IdWF, Estado) values (");
            a.Append("@idUltimoIdAirTicket, ");
            a.Append("'" + AirTicket.Usuario.Id + "', ");
            a.Append("'" + AirTicket.Nombre + "', ");
            a.Append("'" + AirTicket.Telefono + "', ");
            a.Append("'" + AirTicket.Email + "', ");
            a.Append(Convert.ToInt32(AirTicket.IdaYVuelta) + ", ");
            a.Append("'" + AirTicket.PaisOrigen + "', ");
            a.Append("'" + AirTicket.ProvinciaOrigen + "', ");
            a.Append("'" + AirTicket.LocalidadOrigen + "', ");
            a.Append("'" + AirTicket.PaisDestino + "', ");
            a.Append("'" + AirTicket.ProvinciaDestino + "', ");
            a.Append("'" + AirTicket.LocalidadDestino + "', ");
            a.Append("'" + AirTicket.FechaDesde.ToString("yyyyMMdd")+ "', ");
            a.Append("'" + AirTicket.FechaHasta.ToString("yyyyMMdd") + "', ");
            a.Append("'" + AirTicket.Clase + "', ");
            a.Append(AirTicket.CantidadPersonasAdult + ", ");
            a.Append(AirTicket.CantidadPersonasChild + ", ");
            a.Append("'" + AirTicket.Descripcion + "', ");
            a.Append("'" + AirTicket.FechaAlta.ToString("yyyyMMdd") + "', ");
            a.Append("@idWF, ");
            a.Append("'" + AirTicket.WF.Estado + "' ");
            a.AppendLine(") ");
            a.AppendLine("insert Log values (@idWF, getdate(), '" + sesion.Usuario.Id + "', 'AirTicket', 'Alta', '" + AirTicket.WF.Estado + "', '') ");
            a.AppendLine("Select @idUltimoIdAirTicket");
            a.AppendLine();
            DataTable dt = new DataTable();
            dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.Usa, sesion.CnnStr);
            int resp = 0;
            if (dt.Rows.Count != 0)
            {
                resp = Convert.ToInt32(dt.Rows[0][0].ToString());
            }
            return resp;
        }
        public void CambiarEstado(Entidades.AirTicket AirTicket, string Evento, string Estado)
        {
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("update AirTicket set ");
                a.Append("Estado='" + Estado + "' ");
                a.AppendLine("where IdAirTicket=" + AirTicket.Id);
                a.AppendLine("insert Log values (" + AirTicket.WF.Id.ToString() + ", getdate(), '" + sesion.Usuario.Id + "', 'AirTicket', '" + Evento + "', '" + Estado + "', '') ");
                Ejecutar(a.ToString(), TipoRetorno.None, Transaccion.Usa, sesion.CnnStr);
            }
        }
        public List<Entidades.AirTicket> ListaPorIdAirTicket(int IdAirTicket, bool SoloPropias)
        {
            List<Entidades.AirTicket> lista = new List<Entidades.AirTicket>();
            if (sesion.Usuario.Id != null)
            {
                StringBuilder a = new StringBuilder(string.Empty);
                a.Append("select AirTicket.IdAirTicket, AirTicket.IdUsuario, AirTicket.Nombre,  AirTicket.Telefono, AirTicket.Email, AirTicket.IdaYVuelta, AirTicket.PaisOrigen, AirTicket.ProvinciaOrigen, AirTicket.LocalidadOrigen, AirTicket.PaisDestino, AirTicket.ProvinciaDestino, AirTicket.LocalidadDestino, ");
                a.Append("AirTicket.FechaDesde, AirTicket.FechaHasta, AirTicket.Clase, AirTicket.CantidadPersonasAdult, AirTicket.CantidadPersonasChild, AirTicket.Descripcion, AirTicket.FechaAlta, AirTicket.IdWF, AirTicket.Estado ");
                a.Append("from AirTicket where (AirTicket.IdUsuario in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='OperAirTicket' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')");
                if (!SoloPropias)
                {
                    a.Append(" or '" + sesion.Usuario.Id + "' in (Select Permiso.IdUsuario from Permiso where Permiso.IdTipoPermiso='AdminSITE' and Permiso.IdUsuario='" + sesion.Usuario.Id + "' and Permiso.Estado='Active')) ");
                }
                else
                {
                    a.Append(") ");
                }
                a.Append("and IdAirTicket = " + IdAirTicket);
                DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
                if (dt.Rows.Count != 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        Entidades.AirTicket airTicket = new Entidades.AirTicket();
                        Copiar(dt.Rows[i], airTicket);
                        lista.Add(airTicket);
                    }
                }
            }
            return lista;
        }
        public List<Entidades.AirTicket> ListaCompleta(string OrderBy, string Nombre, string Pais, string Provincia, string Localidad, string Estado)
        {
            List<Entidades.AirTicket> lista = new List<Entidades.AirTicket>();
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select AirTicket.IdAirTicket, AirTicket.IdUsuario, AirTicket.Nombre,  AirTicket.Telefono, AirTicket.Email, AirTicket.IdaYVuelta, AirTicket.PaisOrigen, AirTicket.ProvinciaOrigen, AirTicket.LocalidadOrigen, AirTicket.PaisDestino, AirTicket.ProvinciaDestino, AirTicket.LocalidadDestino, ");
            a.Append("AirTicket.FechaDesde, AirTicket.FechaHasta, AirTicket.Clase, AirTicket.CantidadPersonasAdult, AirTicket.CantidadPersonasChild, AirTicket.Descripcion, AirTicket.FechaAlta, AirTicket.IdWF, AirTicket.Estado ");
            a.Append("from AirTicket where 1=1 ");
            if (!Nombre.Equals(string.Empty))
            {
                a.Append("and Nombre like '%" + Nombre + "%' ");
            }
            if (!Pais.Equals(string.Empty))
            {
                a.Append("and PaisOrigen like '%" + Pais + "%' ");
            }
            if (!Localidad.Equals(string.Empty))
            {
                a.Append("and LocalidadOrigen like '%" + Localidad + "%' ");
            }
            if (!Estado.Equals(string.Empty))
            {
                if (!Estado.Equals("All"))
                {
                    a.Append("and Estado like '%" + Estado + "%' ");
                }
            }
            else
            {
                a.Append("and Estado = 'Active' ");
            }
            a.Append("order by " + OrderBy);
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count != 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Entidades.AirTicket airTicket = new Entidades.AirTicket();
                    Copiar(dt.Rows[i], airTicket);
                    lista.Add(airTicket);
                }
            }
            return lista;
        }
        public List<Entidades.AirTicket> Lista(int IndicePagina, int TamañoPagina, string OrderBy, string SessionID, List<Entidades.AirTicket> AirTicketLista)
        {
            System.Text.StringBuilder a = new StringBuilder();
            a.Append("CREATE TABLE #AirTicket" + SessionID + "( ");
            a.Append("[IdAirTicket] [int] NOT NULL, ");
	        a.Append("[IdUsuario] [varchar](50) NOT NULL, ");
            a.Append("[Nombre] [varchar](50) NOT NULL, ");
	        a.Append("[Email] [varchar](60) NOT NULL, ");
	        a.Append("[Telefono] [varchar](50) NOT NULL, ");   
	        a.Append("[idaYVuelta] [bit] NOT NULL, ");   
	        a.Append("[PaisOrigen] [varchar](50) NOT NULL, ");
	        a.Append("[ProvinciaOrigen] [varchar](50) NOT NULL, ");
	        a.Append("[LocalidadOrigen] [varchar](50) NOT NULL, ");
	        a.Append("[PaisDestino] [varchar](50) NOT NULL, ");
	        a.Append("[ProvinciaDestino] [varchar](50) NOT NULL, ");
	        a.Append("[LocalidadDestino] [varchar](50) NOT NULL, ");
	        a.Append("[FechaDesde] [datetime] NOT NULL, ");
	        a.Append("[FechaHasta] [datetime] NOT NULL, ");
	        a.Append("[Clase] [varchar](30) NOT NULL, ");
	        a.Append("[CantidadPersonasAdult] [int] NOT NULL, ");
	        a.Append("[CantidadPersonasChild] [int] NOT NULL, ");
	        a.Append("[Descripcion] [varchar](250) NOT NULL, ");
	        a.Append("[FechaAlta] [datetime] NOT NULL, ");
	        a.Append("[IdWF] [int] NOT NULL, ");
            a.Append("[Estado] [varchar](15) NOT NULL, ");
            a.Append("CONSTRAINT [PK_AirTicket" + SessionID + "] PRIMARY KEY CLUSTERED ");
            a.Append("( ");
            a.Append("[IdAirTicket] ASC ");
            a.Append(")WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ");
            a.Append(") ON [PRIMARY] ");
            foreach (Entidades.AirTicket AirTicket in AirTicketLista)
            {
                a.Append("Insert #AirTicket" + SessionID + " values (" + AirTicket.Id + ", '");
                a.Append(AirTicket.Usuario.Id + "', '");
                a.Append(AirTicket.Nombre + "', '");
                a.Append(AirTicket.Email + "', '");
                a.Append(AirTicket.Telefono + "', ");
                a.Append(Convert.ToInt32(AirTicket.IdaYVuelta) + ", '");
                a.Append(AirTicket.PaisOrigen + "', '");
                a.Append(AirTicket.ProvinciaOrigen + "', '");
                a.Append(AirTicket.LocalidadOrigen + "', '");
                a.Append(AirTicket.PaisDestino + "', '");
                a.Append(AirTicket.ProvinciaDestino + "', '");
                a.Append(AirTicket.LocalidadDestino + "', '");
                a.Append(AirTicket.FechaDesde.ToString("yyyyMMdd") + "', '");
                a.Append(AirTicket.FechaHasta.ToString("yyyyMMdd") + "', '");
                a.Append(AirTicket.Clase + "', ");
                a.Append(AirTicket.CantidadPersonasAdult + ", ");
                a.Append(AirTicket.CantidadPersonasChild + ", '");
                a.Append(AirTicket.Descripcion + "', '");
                a.Append(AirTicket.FechaAlta.ToString("yyyyMMdd") + "', ");
                a.Append(AirTicket.WF.Id + ", '");
                a.Append(AirTicket.Estado + "') ");
            }
            a.Append("select * ");
            a.Append("from (select top {0} ROW_NUMBER() OVER (ORDER BY {1}) as ROW_NUM, ");
            a.Append("IdAirTicket, IdUsuario, Nombre, Email, Telefono, IdaYVuelta, PaisOrigen, ProvinciaOrigen, LocalidadOrigen, PaisDestino, ProvinciaDestino, LocalidadDestino, ");
            a.Append("FechaDesde, FechaHasta, Clase, CantidadPersonasAdult, CantidadPersonasChild, Descripcion, FechaAlta, IdWF, Estado ");
            a.Append("from #AirTicket" + SessionID + " ");
            a.Append("ORDER BY ROW_NUM) innerSelect WHERE ROW_NUM > {2} ");
            a.Append("DROP TABLE #AirTicket" + SessionID);
            if (OrderBy.Trim().ToUpper() == "NOMBRE" || OrderBy.Trim().ToUpper() == "NOMBRE DESC" || OrderBy.Trim().ToUpper() == "NOMBRE ASC")
            {
                OrderBy = "#AirTicket" + SessionID + "." + OrderBy;
            }
            if (OrderBy.Trim().ToUpper() == "PAISORIGEN" || OrderBy.Trim().ToUpper() == "PAISORIGEN DESC" || OrderBy.Trim().ToUpper() == "PAISORIGEN ASC")
            {
                OrderBy = "#AirTicket" + SessionID + "." + OrderBy;
            }
            string commandText = string.Format(a.ToString(), ((IndicePagina + 1) * TamañoPagina), OrderBy, (IndicePagina * TamañoPagina));
            DataTable dt = new DataTable();
            dt = (DataTable)Ejecutar(commandText.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            List<Entidades.AirTicket> lista = new List<Entidades.AirTicket>();
            if (dt.Rows.Count != 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Entidades.AirTicket AirTicket = new Entidades.AirTicket();
                    AirTicket.Id = Convert.ToInt32(dt.Rows[i]["IdAirTicket"].ToString());
                    AirTicket.Usuario.Id = dt.Rows[i]["IdUsuario"].ToString();
                    AirTicket.Nombre = dt.Rows[i]["Nombre"].ToString();
                    AirTicket.Email = dt.Rows[i]["Email"].ToString();
                    AirTicket.Telefono = dt.Rows[i]["Telefono"].ToString();
                    AirTicket.IdaYVuelta = Convert.ToBoolean(dt.Rows[i]["IdaYVuelta"]);
                    AirTicket.PaisOrigen = dt.Rows[i]["PaisOrigen"].ToString();
                    AirTicket.ProvinciaOrigen = dt.Rows[i]["ProvinciaOrigen"].ToString();
                    AirTicket.LocalidadOrigen = dt.Rows[i]["LocalidadOrigen"].ToString();
                    AirTicket.PaisDestino = dt.Rows[i]["PaisDestino"].ToString();
                    AirTicket.ProvinciaDestino = dt.Rows[i]["ProvinciaDestino"].ToString();
                    AirTicket.LocalidadDestino = dt.Rows[i]["LocalidadDestino"].ToString();
                    AirTicket.FechaDesde = Convert.ToDateTime(dt.Rows[i]["FechaDesde"]);
                    AirTicket.FechaHasta = Convert.ToDateTime(dt.Rows[i]["FechaHasta"]);
                    AirTicket.Clase = dt.Rows[i]["Clase"].ToString();
                    AirTicket.CantidadPersonasAdult = Convert.ToInt32(dt.Rows[i]["CantidadPersonasAdult"].ToString());
                    AirTicket.CantidadPersonasChild = Convert.ToInt32(dt.Rows[i]["CantidadPersonasChild"].ToString());
                    AirTicket.Descripcion = dt.Rows[i]["Descripcion"].ToString();
                    AirTicket.FechaAlta = Convert.ToDateTime(dt.Rows[i]["FechaAlta"]);
                    AirTicket.WF.Id = Convert.ToInt32(dt.Rows[i]["IdWF"].ToString());
                    AirTicket.WF.Estado = dt.Rows[i]["Estado"].ToString();
                    lista.Add(AirTicket);
                }
            }
            return lista;
        }
        public bool ComprobarNombreAirTicket(string Nombre)
        {
            bool resp = false;
            StringBuilder a = new StringBuilder(string.Empty);
            a.Append("select AirTicket.IdAirTicket, AirTicket.IdUsuario, AirTicket.Nombre,  AirTicket.Telefono, AirTicket.Email, AirTicket.IdaYVuelta, AirTicket.PaisOrigen, AirTicket.ProvinciaOrigen, AirTicket.LocalidadOrigen, AirTicket.PaisDestino, AirTicket.ProvinciaDestino, AirTicket.LocalidadDestino, ");
            a.Append("AirTicket.FechaDesde, AirTicket.FechaHasta, AirTicket.Clase, AirTicket.CantidadPersonasAdult, AirTicket.CantidadPersonasChild, AirTicket.Descripcion, AirTicket.FechaAlta, AirTicket.IdWF, AirTicket.Estado "); a.Append("from AirTicket where ");
            a.Append("Nombre like '%" + Nombre + "%'");
            DataTable dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr);
            if (dt.Rows.Count != 0)
            {
                resp = true;
            }
            return resp;
        }
    }
}
